package com.goodfox.web.generic.provide.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 实体字段注解
 * @author qin gt
 *
 */
@Target({ElementType.FIELD}) 
@Retention(RetentionPolicy.RUNTIME)
public @interface DbField {

	/**
	 * 字段注释（字段的汉语名或字段导出的表头）
	 * @return
	 */
	String comment();
	
	/**
	 * 是否有意义（是否是数据库或实体业务中必要的字段）
	 * @return
	 */
	boolean meaning() default true;
	
	/**
	 * 对应数据列
	 * @return
	 */
	String column() default "";
	
	/**
	 * 是否需要导出
	 * @return
	 */
	boolean export() default true;
	
	/**
	 * 是否为主键
	 * @return
	 */
	boolean pk() default false;
	
	/**
	 * java类型
	 * @return
	 */
	String javaType() default "String";
	
	/**
	 * 数据类型
	 * @return
	 */
	String dataType() default "VARCHAR";
	
	/**
	 * 格式化格式
	 * @return
	 */
	String pattern() default "yyyy-MM-dd HH:mm:ss";
	
	/**
	 * 是否为外部链接（外键）
	 * @return
	 */
	boolean fk() default false;
	
	/**
	 * 被链接数据表（外键）
	 * @return
	 */
	String linkTable() default "";
	
	/**
	 * 被链接数据列（外键）
	 * @return
	 */
	String linkColumn() default "";
	
	/**
	 * 是否为负数（外键）
	 * @return
	 */
	boolean plural() default false;
	
	/**
	 * 是否必填
	 * @return
	 */
	boolean required() default false;
	
	/**
	 * 是否为直接字段（直接从数据库中获取的）
	 * @return
	 */
	boolean direct() default true;
	
	/**
	 * 字段最大长度
	 * @return
	 */
	int maxLength() default -1;
	
	/**
	 * 字段描述
	 * @return
	 */
	String remark() default "";
	
	/**
	 * 子类类型
	 * @return
	 */
	Class subClass() default Object.class;
}
